#!/bin/bash

# 日志初始化函数
log_init() {
    local log_dir="$1"
    local debug_mode="$2"
    
    # 创建日志目录
    mkdir -p "${log_dir}"
    
    # 定义日志文件
    LOG_FILE="${log_dir}/easyca_$(date +%Y%m%d_%H%M%S).log"
    ERROR_LOG_FILE="${log_dir}/error.log"
    
    # 清空错误日志文件
    > "${ERROR_LOG_FILE}"
    
    # 定义颜色代码（仅在终端中使用）
    if [ -t 1 ]; then
        COLOR_RESET="\033[0m"
        COLOR_RED="\033[31m"
        COLOR_GREEN="\033[32m"
        COLOR_YELLOW="\033[33m"
        COLOR_BLUE="\033[34m"
        COLOR_MAGENTA="\033[35m"
        COLOR_CYAN="\033[36m"
    else
        COLOR_RESET=""
        COLOR_RED=""
        COLOR_GREEN=""
        COLOR_YELLOW=""
        COLOR_BLUE=""
        COLOR_MAGENTA=""
        COLOR_CYAN=""
    fi
    
    # 导出调试模式标志
    DEBUG_MODE="${debug_mode}"
}

# 日志函数
log() {
    local level="$1"
    local message="$2"
    local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
    
    # 根据级别设置颜色
    case "$level" in
        "ERROR")
            color="${COLOR_RED}"
            # 记录到错误日志文件
            echo "[${timestamp}] [${level}] ${message}" >> "${ERROR_LOG_FILE}"
            ;;
        "WARN")
            color="${COLOR_YELLOW}"
            ;;
        "INFO")
            color="${COLOR_GREEN}"
            ;;
        "DEBUG")
            color="${COLOR_BLUE}"
            ;;
        "MESSAGE")
            color="${COLOR_CYAN}"
            level="INFO"  # 在日志文件中记录为INFO
            ;;
        *)
            color="${COLOR_RESET}"
            ;;
    esac
    
    # 格式化日志信息（带时间戳）
    local log_entry="[${timestamp}] [${level}] ${message}"
    
    # 写入日志文件
    echo "${log_entry}" >> "${LOG_FILE}"
    
    # 在控制台输出带颜色的日志（带时间戳）
    if [ "$level" = "MESSAGE" ]; then
        # 普通消息始终输出到控制台
        echo -e "${COLOR_CYAN}[${timestamp}] [MESSAGE]${COLOR_RESET} ${message}"
    elif [ "$level" = "INFO" ] || [ "$level" = "ERROR" ] || [ "$level" = "WARN" ] || [ "$DEBUG_MODE" = true ]; then
        # 在调试模式下输出所有级别，否则只输出INFO/ERROR/WARN
        echo -e "${color}[${timestamp}] [${level}]${COLOR_RESET} ${message}"
    fi
}

# 调试日志函数
debug_log() {
    if [ "$DEBUG_MODE" = true ]; then
        log "DEBUG" "$1"
    else
        # 仍然写入日志文件，但不输出到控制台
        local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
        echo "[${timestamp}] [DEBUG] $1" >> "${LOG_FILE}"
    fi
}

# 消息函数（始终输出到控制台）
log_message() {
    log "MESSAGE" "$1"
}

# 错误处理函数
log_error() {
    log "ERROR" "$1"
    exit 1
}

# 警告函数
log_warn() {
    log "WARN" "$1"
}

# 信息函数
log_info() {
    log "INFO" "$1"
}
